c
c -- file name gxvelslp.htm 060701 C.... FNVSLP calculates slip velocity for a current slab (NGO=1). It is C called from INIPRP at the start of the run (NGO=0) to make C preliminary settings. SUBROUTINE FNVSLP(NGO,L0VREL,CFPA) INCLUDE 'farray' INCLUDE 'satear' INCLUDE 'grdear' INCLUDE 'grdloc' INCLUDE 'satgrd' COMMON/NAMFN/NAMFUN,NAMSUB /GENI/NXNY,NXM1NY,IG1(7),NFM,IG2(50) 1 /UVWCOL/IUC1,IVC1,IWC1,IUFIL(32) 1 /UCRTUN/IUCF(6),IUCR10,IVCR10,IWCR10,IUCR20,IVCR20,IWCR20 1 /PRPCMN/IPRF(13),LBVREL,LBNUSS LOGICAL SOLU,SOLV,SOLW,XBOU CHARACTER*6 NAMFUN,NAMSUB SAVE SOLU,SOLV,SOLW,VSLPMX C NAMFUN= 'FNVLSP' C.... Preliminaries: IF(NGO.EQ.0) THEN IF(CCM) THEN CALL SUB3L(SOLU,IUC1.NE.0,SOLV,IVC1.NE.0,SOLW,IWC1.NE.0) ELSE CALL SUB3L(SOLU,SOLVE(U1),SOLV,SOLVE(V1),SOLW,SOLVE(W1)) CALL SUB3R(VSLMXU,1.E10,VSLMXV,1.E10,VSLMXW,1.E10) IF(SOLU) VSLMXU=AMIN1( ABS(VARMAX(3)), ABS(VARMAX(4)) ) IF(SOLV) VSLMXV=AMIN1( ABS(VARMAX(5)), ABS(VARMAX(6)) ) IF(SOLW) VSLMXW=AMIN1( ABS(VARMAX(7)), ABS(VARMAX(8)) ) VSLPMX=AMIN1( VSLMXU, VSLMXV, VSLMXW) ENDIF c.... calculate limit for vrel ELSE C.... Calculate slip velocity for a current slab: IF(CCM) THEN IF(SOLU) CALL SUB2( L0U1,IUCR10, L0U2,IUCR20 ) IF(SOLV) CALL SUB2( L0V1,IVCR10, L0V2,IVCR20 ) IF(SOLW) CALL SUB2( L0W1,IWCR10, L0W2,IWCR20 ) IADZS= (IZSTEP-1)*NFM DO 10 IX= IXF,IXL IADX= (IX-1)*NY DO 10 IY= IYF,IYL IJ = IY+IADX IJK= IJ+IADZS DIFFSQ= 0.0 IF(SOLU) DIFFSQ= DIFFSQ + (F(L0U1+IJK)-F(L0U2+IJK))**2 IF(SOLV) DIFFSQ= DIFFSQ + (F(L0V1+IJK)-F(L0V2+IJK))**2 IF(SOLW) DIFFSQ= DIFFSQ + (F(L0W1+IJK)-F(L0W2+IJK))**2 F(L0VREL+IJ)= AMAX1(CFPA,SQRT(DIFFSQ+TINY)) 10 CONTINUE ELSE IF(SOLU) CALL SUB2( L0U1,L0F(U1), L0U2,L0F(U2) ) IF(SOLV) CALL SUB2( L0V1,L0F(V1), L0V2,L0F(V2) ) IF(SOLW) THEN CALL SUB2( L0W1, L0F(W1), L0W2, L0F(W2) ) CALL SUB2( L0W1L,L0W1-NFM, L0W2L,L0W2-NFM ) ENDIF DO 20 IX= IXF,IXL XBOU= IX.EQ.NX.AND..NOT.XCYCLE DO 20 IY= IYF,IYL I= IY+(IX-1)*NY DIFFSQ= 0.0 IF(SOLU) THEN IF(IX.EQ.1) THEN IF(.NOT.XCYCLE) THEN DIFFSQ= 2.*(F(L0U1+I)-F(L0U2+I))**2 ELSE DIFFSQ= (F(L0U1+I)-F(L0U2+I))**2 J= I+NXM1NY DIFFSQ= DIFFSQ + (F(L0U1+J)-F(L0U2+J))**2 ENDIF ELSEIF(XBOU) THEN J= I-NY DIFFSQ= 2.*(F(L0U1+J)-F(L0U2+J))**2 ELSE DIFFSQ= (F(L0U1+I)-F(L0U2+I))**2 J= I-NY DIFFSQ= DIFFSQ + (F(L0U1+J)-F(L0U2+J))**2 ENDIF ENDIF IF(SOLV) THEN IF(IY.EQ.1) THEN DIFFSQ= DIFFSQ + 2.*(F(L0V1+I)-F(L0V2+I))**2 ELSEIF(IY.EQ.NY) THEN DIFFSQ= DIFFSQ + 2.*(F(L0V1+I-1)-F(L0V2+I-1))**2 ELSE DIFFSQ= DIFFSQ + (F(L0V1+I)-F(L0V2+I))**2 1 + (F(L0V1+I-1)-F(L0V2+I-1))**2 ENDIF ENDIF IF(SOLW) THEN IF(IZ.EQ.1) THEN DIFFSQ= DIFFSQ + 2.*(F(L0W1+I)-F(L0W2+I))**2 ELSEIF(IZ.EQ.NZ) THEN DIFFSQ= DIFFSQ + 2.*(F(L0W1L+I)-F(L0W2L+I))**2 ELSE DIFFSQ= DIFFSQ + (F(L0W1 +I)-F(L0W2 +I))**2 1 + (F(L0W1L+I)-F(L0W2L+I))**2 ENDIF ENDIF F(L0VREL+I)= AMAX1(CFPA, SQRT(0.5*DIFFSQ+TINY)) F(L0VREL+I)= AMIN1(F(L0VREL+I),VSLPMX) 20 CONTINUE ENDIF IF(LBVREL.NE.0) CALL FN0(LBVREL,-L0VREL) ENDIF END c